package pl.edu.agh.idrd.crawler;

import edu.uci.ics.crawler4j.crawler.CrawlConfig;
import edu.uci.ics.crawler4j.crawler.CrawlController;
import edu.uci.ics.crawler4j.fetcher.PageFetcher;
import edu.uci.ics.crawler4j.robotstxt.RobotstxtConfig;
import edu.uci.ics.crawler4j.robotstxt.RobotstxtServer;
import java.util.logging.Level;
import java.util.logging.Logger;

public class CrawlerController {
    /*
    * crawlStorageFolder is a folder where intermediate crawl data is
    * stored.
    */
   String crawlStorageFolder = "data";
   
   /*
    * numberOfCrawlers shows the number of concurrent threads that should
    * be initiated for crawling.
    */
   int numberOfCrawlers = 5;
    
    public void startCrawler(){
        
        CrawlConfig config = new CrawlConfig();

        config.setCrawlStorageFolder(crawlStorageFolder);

        /*
         * Be polite: Make sure that we don't send more than 1 request per
         * second (1000 milliseconds between requests).
         */
        config.setPolitenessDelay(200);

        /*
         * You can set the maximum crawl depth here. The default value is -1 for
         * unlimited depth
         */
        config.setMaxDepthOfCrawling(2);

        /*
         * You can set the maximum number of pages to crawl. The default value
         * is -1 for unlimited number of pages
         */
        config.setMaxPagesToFetch(-1);

        /*
         * Do you need to set a proxy? If so, you can use:
         * config.setProxyHost("proxyserver.example.com");
         * config.setProxyPort(8080);
         * 
         * If your proxy also needs authentication:
         * config.setProxyUsername(username); config.getProxyPassword(password);
         */

        /*
         * This config parameter can be used to set your crawl to be resumable
         * (meaning that you can resume the crawl from a previously
         * interrupted/crashed crawl). Note: if you enable resuming feature and
         * want to start a fresh crawl, you need to delete the contents of
         * rootFolder manually.
         */
        config.setResumableCrawling(false);

        /*
         * Instantiate the controller for this crawl.
         */
        PageFetcher pageFetcher = new PageFetcher(config);
        RobotstxtConfig robotstxtConfig = new RobotstxtConfig();
        RobotstxtServer robotstxtServer = new RobotstxtServer(robotstxtConfig,
                        pageFetcher);
        CrawlController controller = null;
        try {
            controller = new CrawlController(config, pageFetcher,
            robotstxtServer);
        } catch (Exception ex) {
            Logger.getLogger(CrawlerController.class.getName()).log(Level.SEVERE, null, ex);
        }

        /*
         * For each crawl, you need to add some seed urls. These are the first
         * URLs that are fetched and then the crawler starts following links
         * which are found in these pages
         */

        /*
        controller.addSeed("http://www.e-drogi.pl/zdwutr/rss.xml");
        controller.addSeed("http://utradmin.linuxpl.info:8080/Utr/admin1.xhtml");
        controller.addSeed("http://raportdrogowy.interia.pl/utrudnienia-na-drogach/malopolskie,regionId,6");
        controller.addSeed("http://www.krakow.gddkia.gov.pl/dla-kierowcow/utrudnienia");

        */
        controller.addSeed(DataCrawler.URL_EDROGI);
        controller.addSeed(DataCrawler.URL_ZDW);
        controller.addSeed(DataCrawler.URL_INTERIA);
      //  controller.addSeed(DataCrawler.URL_GDDKIA);

        controller.start(DataCrawler.class, numberOfCrawlers);
                
               
    }
    
    
    
    
	public static void main(String[] args) throws Exception {
		

		

		

	}
}
